//package com.example.testhiber.initPackage.business.utils;
//
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONArray;
//import com.alibaba.fastjson.JSONObject;
//import org.jsoup.Connection;
//import org.jsoup.Jsoup;
//import org.jsoup.nodes.Document;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.BeanUtils;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.jdbc.core.JdbcTemplate;
//import org.springframework.stereotype.Controller;
//import org.springframework.util.Assert;
//import org.springframework.web.bind.annotation.RequestMapping;
//import simple.system.simpleweb.platform.controller.SimplewebBaseController;
//
//import java.beans.PropertyDescriptor;
//import java.lang.reflect.Method;
//import java.lang.reflect.Modifier;
//import java.util.*;
//import java.util.regex.Pattern;
//
///**
// * 入户调查公共方法
// */
//@Controller
//@RequestMapping("/util")
//public class UtilsController extends SimplewebBaseController {
//    static Logger logger = LoggerFactory.getLogger(UtilsController.class);
//
//    @Autowired
//    private JdbcTemplate jdbcTemplate;
//    private static Pattern pattern = Pattern.compile("\"location\":\"(\\d+\\.\\d+),(\\d+\\.\\d+)\"");
//
//    /**
//     * 多选 获取 字典中文
//     *
//     * @param zdCode  字典code
//     * @param xyfgdzfc  需要分割的字符串
//     */
//    public String getZdName(String zdCode,String xyfgdzfc) {
//        /*RhdcDbjyt*/
//        String dbjytName = "";
//        if(!"".equals(StringKitChange.toString(xyfgdzfc))){
//            String[] dbjArr =  xyfgdzfc.split(",");
//            for(String a :dbjArr){
//                String sql = "select * from s_dicitem where dic_id in (" +
//                        " select id from s_dic where code = '"+ zdCode +"' and deleted = 0" +
//                        " ) and deleted = 0  and code = '"+ a +"'";
//                List<Map<String,Object>> maps = jdbcTemplate.queryForList(sql);
//                if(maps!= null && maps.size()>0){
//                    String name  = StringKitChange.toString(maps.get(0).get("name"));
//                    if("".equals(dbjytName)){
//                        dbjytName = name;
//                    }else {
//                        dbjytName =dbjytName + "," + name;
//                    }
//                }
//            }
//        }
//        return dbjytName;
//    }
//
//    /**
//     * 使用2个时间计算出 相差多少天多少小时多少分钟
//     * @param endDate
//     * @param nowDate
//     * @return
//     */
//    public String getDatePoor( Date nowDate,Date endDate) {
//        long nd = 1000 * 24 * 60 * 60;//每天毫秒数
//        long nh = 1000 * 60 * 60;//每小时毫秒数
//        long nm = 1000 * 60;//每分钟毫秒数
//        long diff = endDate.getTime() - nowDate.getTime(); // 获得两个时间的毫秒时间差异
//        long day = diff / nd;   // 计算差多少天
//        long hour = diff % nd / nh; // 计算差多少小时
//        long min = diff % nd % nh / nm;  // 计算差多少分钟
//        return day + "天" + hour + "小时" + min + "分钟";
//    }
//
//    /**
//     * 使用2个时间计算出 相差多少小时多少分钟
//     * @param endDate
//     * @param nowDate
//     * @return
//     */
//    public Map<String,Object> getDateHourAndMin( Date nowDate,Date endDate) {
//        long nd = 1000 * 24 * 60 * 60;//每天毫秒数
//        long nh = 1000 * 60 * 60;//每小时毫秒数
//        long nm = 1000 * 60;//每分钟毫秒数
//        long diff = endDate.getTime() - nowDate.getTime(); // 获得两个时间的毫秒时间差异
//        long day = diff / nd;   // 计算差多少天
//        long hour = diff % nd / nh; // 计算差多少小时
//        long hourEnd = hour + day*24;
//        long min = diff % nd % nh / nm;  // 计算差多少分钟
//        String endStr = "";
//        String sfcs = "";
//        if(hourEnd>=48){
//            sfcs = "已超期";
//        }
//
//        Map<String,Object> maps = new HashMap<>();
//        if(hourEnd==0){
//            endStr=min + "分钟";
//        }else {
//            endStr= hourEnd + "小时" + min + "分钟";
//        }
//
//        maps.put("fwsc",endStr);
//        maps.put("sfcq",sfcs);
//
//        return  maps;
//    }
//
//
//  //  a3a84b87a34c752753a15cb9d7ba4922
//
//
//    /**
//     *	调用高德地图传入经纬度详细地址
//     * @return
//     */
//    public String getgddtXxdz(String jd,String wd){
//        String jwd = jd+","+wd;
//        String callurl = "https://restapi.amap.com/v3/geocode/regeo";
//        String params = "?key=a3a84b87a34c752753a15cb9d7ba4922&location="+jwd;
//        callurl = callurl+params;
//        //传入参数  纬度在前 ，精度在后89.3333,29.3333
//        logger.info("gddturl:"+callurl);
//
//        Object res=null;
//        JSONObject jsonObject = null;
//        String xxdz = "";
//        try{
//            Connection con= Jsoup.connect(callurl);
////            con.data("dataID",dataID);
//            con.ignoreContentType(true);
//            Document doc = con.timeout(50000).get();//解决reartimeout报错
//            res=doc.text();
//
//            jsonObject = JSON.parseObject(StringKitChange.toString(res));
//            logger.info("获取返回结果:"+jsonObject.toJSONString());
//            Object result2 = jsonObject.get("regeocode");
//            logger.info(StringKitChange.toString(result2));
//
//            JSONObject jsonObject2 = JSON.parseObject(StringKitChange.toString(result2));
//            if(jsonObject2!= null ){
//                Object xxdzObj = jsonObject2.get("formatted_address");
//                xxdz = StringKitChange.toString(xxdzObj);
//            }
//
//        }catch (Exception e){
//            logger.info("异常信息:"+e.getMessage());
//        }
//        return xxdz;
//    }
//
//
//
//    /**
//     *	调用高德地图传入详细地址获取经纬度
//     * @return
//     */
//    public String getgddtJwd(String xxdz){
//        String callurl = "https://restapi.amap.com/v3/geocode/geo";
//        String params = "?key=a3a84b87a34c752753a15cb9d7ba4922&address="+xxdz;
//        callurl = callurl+params;
//        //传入参数  纬度在前 ，精度在后89.3333,29.3333
//        logger.info("gddturl:"+callurl);
//
//        Object res=null;
//        JSONObject jsonObject = null;
//        String jwd = "";
//        try{
//            Connection con= Jsoup.connect(callurl);
////            con.data("dataID",dataID);
//            con.ignoreContentType(true);
//            Document doc = con.timeout(50000).get();//解决reartimeout报错
//            res=doc.text();
//
//            jsonObject = JSON.parseObject(StringKitChange.toString(res));
//            logger.info("获取返回结果:"+jsonObject.toJSONString());
//            Object result2 = jsonObject.get("geocodes");
//            logger.info(StringKitChange.toString(result2));
//
//            JSONArray jsonArray = JSON.parseArray(StringKitChange.toString(result2));
//            if(jsonArray!= null && jsonArray.size()>0){
//                Object xxdzObj = jsonArray.get(0);
//                JSONObject jsonEnd = JSON.parseObject(StringKitChange.toString(xxdzObj));
//                Object objEnd = jsonEnd.get("location");
//                jwd = StringKitChange.toString(objEnd);
//            }
//
//        }catch (Exception e){
//            logger.info("异常信息:"+e.getMessage());
//        }
//        return jwd;
//    }
//
//
//
//
//    /**
//     * 修改底层方法
//     * @param source
//     * @param ignoreProperties
//     * @return
//     */
//    public static Map<String, Object> describe(Object source, String... ignoreProperties) {
//        Assert.notNull(source, "Source must not be null");
//        HashMap<String, Object> result = new HashMap();
//        List<String> ignoreList = ignoreProperties != null ? Arrays.asList(ignoreProperties) : null;
//        Class<?> clazz = source.getClass();
//        PropertyDescriptor[] sourcePds = BeanUtils.getPropertyDescriptors(clazz);
//
//        for(int i = 0; i < sourcePds.length; ++i) {
//            PropertyDescriptor sourcePd = sourcePds[i];
//            String name = sourcePd.getName();
//            if (ignoreList == null || !ignoreList.contains(name)) {
//
//                Object str =getFiledValue(source, sourcePd);
//                String res = String.valueOf(StringKitChange.toString(str));
//                if( "null".equals(res) || "underfind".equals(res) || "undefined".equals(res)  ){
//                    res="";
//                }
//                result.put(name, res);
//            }
//        }
//
//        return result;
//    }
//
//    private static Object getFiledValue(Object source, PropertyDescriptor sourcePd) {
//        try {
//            Method readMethod = sourcePd.getReadMethod();
//            if (!Modifier.isPublic(readMethod.getDeclaringClass().getModifiers())) {
//                readMethod.setAccessible(true);
//            }
//            return readMethod.invoke(source);
//        } catch (Exception var3) {
//            logger.debug("Could not copy properties from source to HashMap:{}", var3.getMessage(), var3);
//            return null;
//        }
//    }
//
//}